//#include<iostream>
//#include<set>
//using namespace std;
//
//int main()
//{
//	set<int> se;
//	cout << se.empty() << endl;
//
//	se.insert(1);
//	cout << se.empty() << endl;
//	return 0;
//}
//
//#include <iostream>
//#include <set>
//
//int main()
//{
//	std::set<int> myints;
//	std::cout << "0. size: " << myints.size() << '\n';
//
//	for (int i = 0; i < 10; ++i) myints.insert(i);
//	std::cout << "1. size: " << myints.size() << '\n';
//
//	myints.insert(100);
//	std::cout << "2. size: " << myints.size() << '\n';
//
//	myints.erase(5);
//	std::cout << "3. size: " << myints.size() << '\n';
//
//	return 0;
//}
//
// set::insert (C++98)
//#include <iostream>
//#include <set>
//
//int main()
//{
//    std::set<int> myset;
//    std::set<int>::iterator it;
//    std::pair<std::set<int>::iterator, bool> ret;
//
//     set some initial values:
//    for (int i = 1; i <= 5; ++i) myset.insert(i * 10);    // set: 10 20 30 40 50
//
//    ret = myset.insert(20);               // no new element inserted
//
//    if (ret.second == false) it = ret.first;  // "it" now points to element 20
//
//    myset.insert(it, 25);                 // max efficiency inserting
//    myset.insert(it, 24);                 // max efficiency inserting
//    myset.insert(it, 26);                 // no max efficiency inserting
//
//    int myints[] = { 5,10,15 };              // 10 already in set, not inserted
//    myset.insert(myints, myints + 3);
//
//    std::cout << "myset contains:";
//    for (it = myset.begin(); it != myset.end(); ++it)
//        std::cout << ' ' << *it;
//    std::cout << '\n';
//
//    return 0;
//}
//
//#include <iostream>
//#include <set>
//
//int main()
//{
//    std::set<int> myset;
//    std::set<int>::iterator it;
//
//    // insert some values:
//    for (int i = 1; i < 10; i++) myset.insert(i * 10);  // 10 20 30 40 50 60 70 80 90
//
//    it = myset.begin();
//    ++it;                                         // "it" points now to 20
//
//    myset.erase(it);
//
//    myset.erase(40);
//
//    it = myset.find(60);
//    myset.erase(it, myset.end());
//
//    std::cout << "myset contains:";
//    for (it = myset.begin(); it != myset.end(); ++it)
//        std::cout << ' ' << *it;
//    std::cout << '\n';
//
//    return 0;
//}
//
//#include <iostream>
//#include <set>
//
//int main()
//{
//    std::set<int> myset;
//
//    myset.insert(100);
//    myset.insert(200);
//    myset.insert(300);
//
//    std::cout << "myset contains:";
//    for (std::set<int>::iterator it = myset.begin(); it != myset.end(); ++it)
//        std::cout << ' ' << *it;
//    std::cout << '\n';
//
//    myset.clear();
//    myset.insert(1101);
//    myset.insert(2202);
//
//    std::cout << "myset contains:";
//    for (std::set<int>::iterator it = myset.begin(); it != myset.end(); ++it)
//        std::cout << ' ' << *it;
//    std::cout << '\n';
//
//    return 0;
//}
//
//#include <iostream>
//#include <set>
//
//int main()
//{
//    std::set<int> myset;
//    std::set<int>::iterator it;
//
//    // set some initial values:
//    for (int i = 1; i <= 5; i++) myset.insert(i * 10);    // set: 10 20 30 40 50
//
//    it = myset.find(20);
//    myset.erase(it);
//    myset.erase(myset.find(40));
//
//    std::cout << "myset contains:";
//    for (it = myset.begin(); it != myset.end(); ++it)
//        std::cout << ' ' << *it;
//    std::cout << '\n';
//
//    return 0;
//}

//#include <iostream>
//#include <set>
//
//int main()
//{
//    std::set<int> myset;
//
//    // set some initial values:
//    for (int i = 1; i < 5; ++i) myset.insert(i * 3);    // set: 3 6 9 12
//
//    for (int i = 0; i < 10; ++i)
//    {
//        std::cout << i;
//        if (myset.count(i) != 0)
//            std::cout << " is an element of myset.\n";
//        else
//            std::cout << " is not an element of myset.\n";
//    }
//
//    return 0;
//}

// set::lower_bound/upper_bound
#include <iostream>
#include <set>

int main()
{
    std::set<int> myset;
    std::set<int>::iterator itlow, itup;

    for (int i = 1; i < 10; i++) myset.insert(i * 10); // 10 20 30 40 50 60 70 80 90

    itlow = myset.lower_bound(30);                //       ^
    itup = myset.upper_bound(60);                 //                   ^

    myset.erase(itlow, itup);                     // 10 20 70 80 90

    std::cout << "myset contains:";
    for (std::set<int>::iterator it = myset.begin(); it != myset.end(); ++it)
        std::cout << ' ' << *it;
    std::cout << '\n';

    return 0;
}